// 1. 引入axios
import axios from 'axios';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import { getUserTempId } from '@/utils/getUserTempId';
import store from '@/store'
// 2. 创建axios实例
const ajax = axios.create({
  // baseURL: 'http://sph-h5-api.atguigu.cn',
  baseURL: '/api',
  timeout: 5000
});

// 3. 设置请求拦截器
ajax.interceptors.request.use(config => {
  // 只要发送请求 就会先走请求拦截器
  // 可以在此处做一步进一步的设置  比如进度条
  // 设置的请求头token

  // 设置进度条的开始
  NProgress.start();
  // 添加临时的唯一身份id
  // config.headers.userTempId = uuidV4()
  config.headers.userTempId = getUserTempId()

  // 获取token 加到请求头上
  const token = store.state.user.userInfo.token;
  if(token) {
    config.headers.token = token
  }
  return config;
});

// 4. 设置响应拦截器
ajax.interceptors.response.use(
  response => {
    // 进度条的结束
    NProgress.done();
    // 如果请求成功，则从响应回来的数据(Promise对象)中的data中获取
    return response.data;
  },
  error => {
    // 进度条的结束
    NProgress.done();
    // console.log(error.message);
    // 如果在此处返回的是一个非Promise值,则会认为是成功的请求，因此应该返回真正的Pomise对象
    return Promise.reject(new Error(error.message))

  }
);

// 5. 导出当前的异步对象
export default ajax;